import request from './index';

/**
 * 获取物流信息
 * @param {string} orderNo - 订单号
 * @returns {Promise} - 物流信息
 */
export const getLogisticsInfo = (orderNo) => {
  return request({
    url: `/logistics/${orderNo}`,
    method: 'get'
  });
};

/**
 * 模拟物流信息（当后端API不可用时使用）
 * @param {string} orderNo - 订单号
 * @param {Object} options - 可选参数
 * @param {string} options.receivingAddress - 收货地址
 * @returns {Promise} - 模拟的物流信息
 */
export const simulateLogisticsInfo = (orderNo, options = {}) => {
  return new Promise((resolve) => {
    // 模拟网络延迟
    setTimeout(() => {
      // 固定坐标，避免地理编码失败
      const shippingCoords = getShippingCoordinates();
      const receivingCoords = getReceivingCoordinates(options.receivingAddress);
      
      // 模拟物流数据
      const mockData = {
        orderNo,
        logisticsStatus: 1, // 运输中
        logisticsCompany: '顺丰速运',
        logisticsNumber: 'SF' + Math.floor(Math.random() * 10000000000),
        expectedDeliveryTime: getRandomFutureDate(),
        shippingAddress: '福建省莆田市城厢区莆田学院',
        // 使用传入的收货地址或使用默认地址
        receivingAddress: options.receivingAddress || '北京市朝阳区朝阳公园南路8号',
        logisticsTraces: generateMockTraces(),
        // 添加坐标数据，避免地理编码失败
        shippingCoords,
        receivingCoords
      };
      
      resolve({
        code: 200,
        data: mockData,
        message: '获取物流信息成功'
      });
    }, 500);
  });
};

/**
 * 获取随机未来日期字符串
 * @returns {string} - 日期字符串
 */
function getRandomFutureDate() {
  const now = new Date();
  const daysToAdd = Math.floor(Math.random() * 5) + 1; // 1-5天内
  now.setDate(now.getDate() + daysToAdd);
  
  return now.toLocaleString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit'
  });
}

/**
 * 生成模拟物流轨迹
 * @returns {Array} - 物流轨迹数组
 */
function generateMockTraces() {
  const now = new Date();
  const traces = [
    {
      time: new Date(now.getTime() - 24 * 60 * 60 * 1000).toLocaleString(),
      location: '上海市浦东新区张江高科技园区',
      action: '已发货',
      operator: '发货人员'
    }
  ];
  
  // 添加3-6个随机轨迹点
  const traceCount = Math.floor(Math.random() * 4) + 3;
  let lastTime = now.getTime() - 24 * 60 * 60 * 1000;
  
  for (let i = 0; i < traceCount; i++) {
    lastTime += Math.floor(Math.random() * 6 * 60 * 60 * 1000);
    
    const locations = [
      '上海市浦东新区转运中心',
      '上海市虹桥枢纽',
      '江苏省南京市中转站',
      '安徽省合肥市中转站',
      '河南省郑州市中转站',
      '河北省石家庄中转站',
      '北京市大兴区转运中心',
      '北京市朝阳区配送站'
    ];
    
    const actions = [
      '已揽收',
      '运输中',
      '已到达',
      '已发出',
      '派送中'
    ];
    
    traces.push({
      time: new Date(lastTime).toLocaleString(),
      location: locations[Math.min(i + 1, locations.length - 1)],
      action: actions[Math.floor(Math.random() * actions.length)],
      operator: '物流人员'
    });
  }
  
  // 确保按时间排序（最新的在前面）
  return traces.sort((a, b) => {
    return new Date(b.time) - new Date(a.time);
  });
}

/**
 * 获取发货地址坐标
 * @returns {Array} - [经度, 纬度]
 */
export const getShippingCoordinates = () => {
  return [119.010008, 25.446732]; // 莆田学院示例坐标
};

/**
 * 获取收货地址坐标
 * @param {string} address - 收货地址
 * @returns {Array} - [经度, 纬度]
 */
export const getReceivingCoordinates = (address) => {
  if (!address) {
    return [116.483371, 39.941752]; // 默认坐标（北京）
  }
  
  // 根据地址关键词匹配不同城市坐标
  if (address.includes('福建') || address.includes('莆田')) {
    return [119.007558, 25.454208]; // 福建省莆田市坐标
  } else if (address.includes('贵州') || address.includes('黔西南') || address.includes('兴义')) {
    return [104.891276, 25.088025]; // 贵州省黔西南州兴义市坐标
  } else if (address.includes('北京')) {
    return [116.483371, 39.941752]; // 北京市朝阳区坐标
  } else if (address.includes('上海')) {
    return [121.613939, 31.207767]; // 上海市浦东新区坐标
  } else if (address.includes('广州')) {
    return [113.264434, 23.129162]; // 广州市坐标
  } else if (address.includes('深圳')) {
    return [114.057868, 22.543099]; // 深圳市坐标
  } else if (address.includes('成都')) {
    return [104.065735, 30.659462]; // 成都市坐标
  } else {
    // 提取地址中可能的省份信息，给出一个大致坐标
    const provincesCoords = {
      '江苏': [118.763232, 32.061707], // 南京
      '浙江': [120.153576, 30.287459], // 杭州
      '安徽': [117.283042, 31.86119],  // 合肥
      '河南': [113.665412, 34.757975], // 郑州
      '湖北': [114.298572, 30.584355], // 武汉
      '湖南': [112.982279, 28.19409],  // 长沙
      '江西': [115.892151, 28.676493], // 南昌
      '山东': [117.000923, 36.675807], // 济南
      '山西': [112.549248, 37.857014], // 太原
      '河北': [114.502461, 38.045474], // 石家庄
      '陕西': [108.948024, 34.263161], // 西安
      '四川': [104.065735, 30.659462], // 成都
      '重庆': [106.504962, 29.533155], // 重庆
      '云南': [102.712251, 25.040609], // 昆明
      '广东': [113.280637, 23.125178], // 广州
      '海南': [110.33119, 20.031971],  // 海口
      '辽宁': [123.429096, 41.796767], // 沈阳
      '吉林': [125.3245, 43.886841],   // 长春
      '黑龙江': [126.642464, 45.756967] // 哈尔滨
    };
    
    // 遍历尝试匹配省份
    for (const [province, coords] of Object.entries(provincesCoords)) {
      if (address.includes(province)) {
        return coords;
      }
    }
    
    // 默认坐标
    return [116.483371, 39.941752]; // 北京市朝阳区示例坐标
  }
}; 